package com.example.cc.client.manager;

import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 字段缓存管理器
 */
@Component
@Slf4j
public class FieldMapCache {

    /**
     * 缓存带有@MyValue注解的字段，避免重复查找。
     * 第一层Key: 某个类的Class对象，比如 CartController.class
     * 第二层Key: @MyValue('${maxItem}') 中的 maxItem; Value: 带注解的Field对象
     */
    @Getter
    private final Map<Class<?>, Map<String, Field>> clazzFieldCache = new ConcurrentHashMap<>();

    /**
     * key: 某个字段的注解中的key值，比如 maxItem
     * value: 该字段所在的类，比如 CartController.class
     */
    @Getter
    private final Map<String, Class<?>> keyFieldCache = new ConcurrentHashMap<>();

    public void printCache() {
        log.info("clazzFieldCache: {}", clazzFieldCache);
        log.info("keyFieldCache: {}", keyFieldCache);
    }

}
